﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Xml;
using Custom;

namespace MBilbaoMobilePro
{
    public partial class frmMain : Form
    {

        const string _urlHorario = "http://www.metrobilbao.net/cas/usuario/horariosver.jsp?coddia={0}&codorigen={1}&coddestino={2}";
        Dictionary<string, string> _lineas;
        Dictionary<string, string> _zonas;
        Dictionary<string, Parada> _paradas;

        public frmMain()
        {
            InitializeComponent();
        }

        private bool loadConfig()
        {
            string paradasPath = helper.ApplicationCombinedPath("data", "mparadas.xml");

            try
            {
                helper.FormDisable(this, "Cargando paradas...");
                XmlDocument doc = helper.XmlGetDocument(paradasPath);

                _lineas = new Dictionary<string, string>();
                foreach (XmlNode linea in doc.SelectNodes("/datos/lineas/linea"))
                {
                    _lineas.Add(linea.Attributes["id"].Value, linea.Attributes["nombre"].Value);
                }

                _zonas = new Dictionary<string, string>();
                foreach (XmlNode zona in doc.SelectNodes("/datos/zonas/zona"))
                {
                    _zonas.Add(zona.Attributes["id"].Value, zona.Attributes["nombre"].Value);
                }

                _paradas = new Dictionary<string, Parada>();
                Parada nuevaParada;
                foreach (XmlNode parada in doc.SelectNodes("/datos/paradas/parada"))
                {
                    nuevaParada = new Parada();
                    nuevaParada.Id = parada.Attributes["id"].Value;
                    nuevaParada.Linea = parada.Attributes["linea"].Value;
                    nuevaParada.Zona = parada.Attributes["zona"].Value;
                    nuevaParada.Nombre = parada.Attributes["nombre"].Value;

                    _paradas.Add(nuevaParada.Id, nuevaParada);
                    cmbOrigen.Items.Add(nuevaParada);
                    cmbDestino.Items.Add(nuevaParada);
                }
            }
            catch
            {

            }
            finally
            {
                helper.FormEnable(this);
            }

            return true;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (cmbOrigen.SelectedItem == null || cmbDestino.SelectedItem == null)
            {
                showMessage("Seleccione un origen y un destino para buscar sus horarios.", "Error", false);
                return;
            }

            if (cmbOrigen.SelectedItem == cmbDestino.SelectedItem)
            {
                showMessage("El origen y el destino deben ser diferentes.", "Error", false);
                return;
            }

            string tipoDia = (rbtnNormal.Checked ? 1 : (rbtnVisperas.Checked ? 2 : 3)).ToString();
            string request = string.Format(_urlHorario,tipoDia, ((Parada)cmbOrigen.SelectedItem).Id.Trim(), ((Parada)cmbDestino.SelectedItem).Id.Trim());
            //showMessage("Buscando horarios... por favor espere.", "Conectando con Metro Bilbao", false);
            try
            {
                helper.FormDisable(this, "Buscando horarios...");
                string horarios = helper.getWebRequestResult(request).Replace("\\n", "").Replace("\\r", "").Trim();
                frmHorarios detalleHorario = new frmHorarios();
                helper.FormEnable(this);
                detalleHorario.ShowDetail(horarios, (Parada)cmbOrigen.SelectedItem, (Parada)cmbDestino.SelectedItem);
            }
            catch (Exception)
            {
                helper.FormEnable(this);
                showMessage("No se ha podido contactar con Metro Bilbao", "Error de conexion", true);
            }
        }

        private void menuItem2_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void frmMain_Load(object sender, EventArgs e)
        {
            this.Show();
            if (!loadConfig())
            {
                menuItem2_Click(null, null);
            }
        }

        private void showMessage(string message, string caption, bool critical)
        {
            MessageBox.Show(message, caption, MessageBoxButtons.OK, (critical ? MessageBoxIcon.Exclamation : MessageBoxIcon.None), MessageBoxDefaultButton.Button1);
        }

        private void menuItem5_Click(object sender, EventArgs e)
        {
            string dataPath = helper.ApplicationCombinedPath("data");
            helper.FormDisable(this, "Buscando tarifas...");
            string tarifasPath = helper.ApplicationCombinedPath("data", "tarifas.xml");
            helper.FormEnable(this);
            XmlDocument doc = helper.XmlGetDocument(tarifasPath);

            frmTarifas tarifas = new frmTarifas();
            tarifas.ShowDetail(doc.InnerXml);
        }

        private void menuItem7_Click(object sender, EventArgs e)
        {
            frmAutobuses autobuses = new frmAutobuses();
            autobuses.ShowDialog();
        }
    }
}